package com.ego.service.impl;

import com.ego.commons.exception.DaoException;
import com.ego.commons.pojo.EasyUIDatagrid;
import com.ego.commons.pojo.EgoResult;
import com.ego.commons.utils.IDUtils;
import com.ego.dubbo.service.TbItemDubboService;
import com.ego.pojo.TbItem;
import com.ego.pojo.TbItemDesc;
import com.ego.pojo.TbItemParamItem;
import com.ego.sender.Send;
import com.ego.service.TbItemService;
import org.apache.commons.lang3.StringUtils;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class TbItemServiceImpl implements TbItemService {

    @Reference
    private TbItemDubboService tbItemDubboService;

    @Autowired
    private Send send;

    //获取到两个队列名称
    @Value("${ego.rabbitmq.item.insertName}")
    private String itemInsert;
    @Value("${ego.rabbitmq.item.deleteName}")
    private String itemDelete;

    @Override
    public EasyUIDatagrid showItem(int page, int rows) {
        //进行查询展示
        List<TbItem> list = tbItemDubboService.selectByPage(rows, page);
        long total = tbItemDubboService.selectCount();
        return new EasyUIDatagrid(list,total);
    }

    @Override
    public EgoResult updateStatus(long[] ids, int status) {

        try {
            //进行修改状态 成功返回1
            int index = tbItemDubboService.updateStatusByIds(ids, status);
            if (index==1){
                if (status==1){
                    //讲数组 转换成String类型 用逗号分隔
                    send.send(itemInsert, StringUtils.join(ids,','));
                }else if (status==2 || status==3){
                    send.send(itemDelete,StringUtils.join(ids,','));
                }
                return EgoResult.ok();
            }
        } catch (DaoException e) {
            e.printStackTrace();
        }
        return EgoResult.error("操作失败!");
    }

    @Override
    public EgoResult insert(TbItem tbItem, String desc, String itemParams) {
        //因为页面没有这几个值 所以要自定义添加到表中
        //id不是自增 所以用到工具类随机生成一个id  用算法生成
        Date date = new Date();
        long id = IDUtils.genItemId();
        tbItem.setCreated(date);
        tbItem.setUpdated(date);
        tbItem.setId(id);
        tbItem.setStatus((byte) 1);

        //添加商品描述表  id  和时间 都和内容表相同
        TbItemDesc tbItemDesc = new TbItemDesc();
        tbItemDesc.setItemId(id);
        tbItemDesc.setItemDesc(desc);
        tbItemDesc.setUpdated(date);
        tbItemDesc.setCreated(date);
        //商品规格参数
        TbItemParamItem tbItemParamItem = new TbItemParamItem();
        tbItemParamItem.setId(IDUtils.genItemId());
        tbItemParamItem.setCreated(date);
        tbItemParamItem.setUpdated(date);
        tbItemParamItem.setItemId(id);
        tbItemParamItem.setParamData(itemParams);



        int index = tbItemDubboService.insert(tbItem, tbItemDesc,tbItemParamItem);
        if (index==1){

           /* 直接向solr中新增数据  这种有延迟 性能不够优化
            Map<String,String> param=new HashMap<>();
            param.put("id",id+"");
            HttpClientUtil.doPost("http://localhost:8083/insert",param);*/

           //向itemInsert队列 发送id
           send.send(itemInsert,id);
            return EgoResult.ok();
        }
        return EgoResult.error("新增商品失败");
    }

    @Override
    public EgoResult update(TbItem tbItem, String desc, String itemParams,long itemParamId) {
        Date date = new Date();
        tbItem.setUpdated(date);

        //描述表 自定义修改 主要要添加修改id
        TbItemDesc tbItemDesc = new TbItemDesc();
        tbItemDesc.setUpdated(date);
        tbItemDesc.setItemDesc(desc);
        tbItemDesc.setItemId(tbItem.getId());

        TbItemParamItem tbItemParamItem = new TbItemParamItem();
        tbItemParamItem.setId(itemParamId);
        tbItemParamItem.setParamData(itemParams);
        tbItemParamItem.setUpdated(date);

        int update = tbItemDubboService.update(tbItem, tbItemDesc,tbItemParamItem);
        if (update==1){
            //向itemInsert队列 发送id
            send.send(itemInsert,tbItem.getId());
            return EgoResult.ok();
        }
        return EgoResult.error("修改失败!!!");
    }
}
